package cn.le.io;

import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.Buffer;

/**
 *Java的System类提供了一些简单的静态方法调用,以允许我们对标准输入,输出和错误i/o流
 * 进行重定向
 *
 */
public class Redirecting {

    public static void main(String[] args) {
        PrintStream console = System.out;
        try {
            BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:/Individual/RMI/RMI_Service/src/com/test/Test.java"));
            PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("F:/test.out")));

            System.setIn(in);
            System.setOut(out);
            System.setErr(out);

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in,"gbk"));
            String s;
            while ((s = br.readLine()) != null)
            {
                System.out.println(s);
            }
            out.close();
            System.setOut(console); //恢复setOut,不再输出打文件
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("111--------------------");
    /*
       这个程序将标准输入附接到文件上,并将标准输出和输入错误重定向到另一个文件,
       程序开头处存储了对最初的system.out对象的引用,并且在结尾处将系统输出恢复到该对象上
       i/o重定向操纵的是字节流.而是不字符流,因此我们使用的是InputStream和OutputStream
       而不是Reader和writer
     */
    }
}
